﻿using QuanLyChoVayCaNhan.Forms;
using QuanLyChoVayCaNhan.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace QuanLyChoVayCaNhan.Classes
{
    public class KhachHangTab : BaseTab
    {
        public KhachHangTab() { }
        public KhachHangTab(BindingSource khachHangBindingSource)
        {
            this.MainBindingDataSource = khachHangBindingSource;
        }
        public override MenuItemType[] GetSupportedMenus()
        {
            if (UserManager.GetInstance().IsAdmin())
            {
                return new MenuItemType[] { MenuItemType.VIEW, MenuItemType.REFRESH, MenuItemType.SEARCH_KHACH_HANG };
            }
            else if (UserManager.GetInstance().IsCBQHKH())
            {
                return new MenuItemType[] { MenuItemType.ADD, MenuItemType.VIEW, MenuItemType.EDIT, MenuItemType.DELETE, MenuItemType.REFRESH, MenuItemType.SEARCH_KHACH_HANG };
            }
            else
            {
                return new MenuItemType[] { MenuItemType.VIEW, MenuItemType.REFRESH, MenuItemType.SEARCH_KHACH_HANG };
            }
        }

        public override void LoadData()
        {
            if (MainBindingDataSource != null) {
                switch (FilterIndex) {
                    case BaseTab.FILTER_INDEX_DEFAULT: // load all data
                        MainBindingDataSource.DataSource = ModelManager.GetInstance().db.KhachHangs.ToList();
                        break;
                    case BaseTab.FILTER_INDEX_SEARCH_KH_BY_CMND: // tìm kiếm khách hàng theo CMND
                        MainBindingDataSource.DataSource = ModelManager.GetInstance().db.KhachHangs.Where((x) => x.SoCMND.StartsWith(FilterKey)).ToList();
                        break;
                    default:
                        break;
                }
            }            
        }

        public override string GetTabTitle()
        {
            return "Khách hàng";
        }

        public override void OnAddClick()
        {
            if (!UserManager.GetInstance().IsCBQHKH())
            {
                MessageBox.Show("Bạn không có quyền thực hiện chức năng này");
                return;
            }
            AddKhachHang fAddKhachHang = new AddKhachHang(MenuItemType.ADD);
            fAddKhachHang.FormClosed += fAddKhachHang_FormClosed;
            fAddKhachHang.ShowDialog();
        }

        private void fAddKhachHang_FormClosed(object sender, FormClosedEventArgs e)
        {
            LoadData();
        }

        public override void OnViewClick()
        {
            if (WindowsManager.GetInstance().TabKhachHang.SelectedIndex == -1)
            {
                MessageBox.Show("Bạn chưa chọn khách hàng nào");
                return;
            }
            AddKhachHang fViewKhachHang = new AddKhachHang(MenuItemType.VIEW);
            fViewKhachHang.FormClosed += fAddKhachHang_FormClosed;
            fViewKhachHang.ShowDialog();
        }

        public override void OnEditClick()
        {
            if (!UserManager.GetInstance().IsCBQHKH())
            {
                MessageBox.Show("Bạn không có quyền thực hiện chức năng này");
                return;
            }
            if (WindowsManager.GetInstance().TabKhachHang.SelectedIndex == -1)
            {
                MessageBox.Show("Bạn chưa chọn khách hàng nào");
                return;
            }
            AddKhachHang fEditKhachHang = new AddKhachHang(MenuItemType.EDIT);
            fEditKhachHang.FormClosed += fAddKhachHang_FormClosed;
            fEditKhachHang.ShowDialog();
        }

        public override void OnDeleteClick()
        {
            if (!UserManager.GetInstance().IsCBQHKH())
            {
                MessageBox.Show("Bạn không có quyền thực hiện chức năng này");
                return;
            }
            if (WindowsManager.GetInstance().TabKhachHang.SelectedIndex == -1)
            {
                MessageBox.Show("Bạn chưa chọn khách hàng nào");
                return;
            }
            KhachHang item = ModelManager.GetInstance().db.KhachHangs.ToList().ElementAt(WindowsManager.GetInstance().TabKhachHang.SelectedIndex);
            if (MessageBox.Show("Bạn có chắc chắn muốn xóa khách hàng: " + item.MaKH + "?", "Xác nhận xóa", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
            {
                ModelManager.GetInstance().db.KhachHangs.Remove(item);
                ModelManager.GetInstance().db.SaveChanges();
                LoadData();
            }
        }

        public override void OnHelpClick()
        {
            throw new NotImplementedException();
        }

        public override void OnPrintClick()
        {
            throw new NotImplementedException();
        }

        public override void OnRefreshClick()
        {
            this.FilterIndex = BaseTab.FILTER_INDEX_DEFAULT;
            this.FilterKey = "";
            LoadData();
        }

        public override TabType GetTabType()
        {
            return TabType.KhachHangTab;
        }

        public override void OnViewTDTDClick()
        {
            throw new NotImplementedException();
        }

        public override void OnViewTTTDClick()
        {
            throw new NotImplementedException();
        }

        public override void OnViewTSDBClick()
        {
            throw new NotImplementedException();
        }

        public override void OnEditTDTDClick()
        {
            throw new NotImplementedException();
        }

        public override void OnEditTTTDClick()
        {
            throw new NotImplementedException();
        }

        public override void OnAddTSDBClick()
        {
            throw new NotImplementedException();
        }

        public override void OnPrintTDTDClick()
        {
            throw new NotImplementedException();
        }

        public override void OnPrintTTTDClick()
        {
            throw new NotImplementedException();
        }

        public override void OnPrintTSDBClick()
        {
            throw new NotImplementedException();
        }

        public override void OnSearchKHClick()
        {
            LoadData();
        }
    }
}
